home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-04d.zip / 04d / CHIP / Porady / Niewidoczny w sieci / TOR 0.1.2.7 / vidalia-bundle-0.1.2.7-alpha-0.0.10.exe / Torbutton / torbutton-1.0.4-fx+tb.xpi / chrome / torbutton.jar / content / torbutton.js < prev    next >
Text File  |  2006-06-02  |  16KB  |  402 lines

  1. var m_debug = true;
  2. var m_toolbutton = false;
  3. var m_statuspanel = false;
  4. var m_wasinited = false;
  5. var m_prefs = false;
  6. var m_stringbundle = false;
  7. var m_tb_logger = false;
  8. var m_socks_pref_exists = false;
  9. var m_exclusion_list = "";
  10. var m_http_proxy = false;
  11. var m_http_port = false;
  12. var m_https_proxy = false;
  13. var m_https_port = false;
  14. var m_ftp_proxy = false;
  15. var m_ftp_port = false;
  16. var m_gopher_proxy = false;
  17. var m_gopher_port = false;
  18. var m_socks_host = false;
  19. var m_socks_port = false;
  20.  
  21. var torbutton_pref_observer =
  22. {
  23.     register: function()
  24.     {
  25.         var pref_service = Components.classes["@mozilla.org/preferences-service;1"]
  26.                                      .getService(Components.interfaces.nsIPrefBranchInternal);
  27.         this._branch = pref_service.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
  28.         this._branch.addObserver("", this, false);
  29.     },
  30.  
  31.     unregister: function()
  32.     {
  33.         if (!this._branch) return;
  34.         this._branch.removeOberver("", this);
  35.     },
  36.  
  37.     // topic:   what event occurred
  38.     // subject: what nsIPrefBranch we're observing
  39.     // data:    which pref has been changed (relative to subject)
  40.     observe: function(subject, topic, data)
  41.     {
  42.         if (topic != "nsPref:changed") return;
  43.         switch (data) {
  44.             case "extensions.torbutton.display_panel":
  45.                 torbutton_set_panel_view();
  46.                 break;
  47.             case "extensions.torbutton.panel_style":
  48.                 torbutton_set_panel_style();
  49.                 break;
  50.             case "extensions.torbutton.http_proxy":
  51.             case "extensions.torbutton.http_port":
  52.             case "extensions.torbutton.https_proxy":
  53.             case "extensions.torbutton.https_port":
  54.             case "extensions.torbutton.ftp_proxy":
  55.             case "extensions.torbutton.ftp_port":
  56.             case "extensions.torbutton.gopher_proxy":
  57.             case "extensions.torbutton.gopher_port":
  58.             case "extensions.torbutton.socks_host":
  59.             case "extensions.torbutton.socks_port":
  60.                 torbutton_init_prefs();
  61.             case "network.proxy.http":
  62.             case "network.proxy.http_port":
  63.             case "network.proxy.ssl":
  64.             case "network.proxy.ssl_port":
  65.             case "network.proxy.ftp":
  66.             case "network.proxy.ftp_port":
  67.             case "network.proxy.gopher":
  68.             case "network.proxy.gopher_port":
  69.             case "network.proxy.socks":
  70.             case "network.proxy.socks_port":
  71.             case "network.proxy.socks_version":
  72.             case "network.proxy.share_proxy_settings":
  73.             case "network.proxy.socks_remote_dns":
  74.             case "network.proxy.type":
  75.                 torbutton_set_status();
  76.                 break;
  77.         }
  78.     }
  79. }
  80.  
  81. function torbutton_set_panel_view() {
  82.     torbutton_log(4, 'setting panel visibility');
  83.     var display_panel = m_prefs.getBoolPref('extensions.torbutton.display_panel');
  84.     document.getElementById('torbutton-panel').setAttribute('collapsed', !display_panel);
  85. }
  86.  
  87. function torbutton_set_panel_style() {
  88.     var panel_style = m_prefs.getCharPref('extensions.torbutton.panel_style');
  89.     torbutton_log(4, 'setting panel style: ' + panel_style);
  90.     document.getElementById('torbutton-panel').setAttribute('class','statusbarpanel-'+panel_style);
  91. }
  92.  
  93. function torbutton_toggle() {
  94.     torbutton_log(1, 'called toggle()');
  95.     if (!m_wasinited) {
  96.         torbutton_init();
  97.     }
  98.     if (!m_toolbutton) {
  99.         torbutton_init_toolbutton();
  100.     }
  101.  
  102.     if (torbutton_check_status()) {
  103.         torbutton_disable_tor();
  104.     } else {
  105.         torbutton_enable_tor();
  106.     }
  107. }
  108.  
  109. function torbutton_set_status() {
  110.     if (torbutton_check_status()) {
  111.         torbutton_log(1,'tor is enabled');
  112.         torbutton_update_status(1);
  113.     } else {
  114.         torbutton_log(1,'tor is disabled');
  115.         torbutton_update_status(0);
  116.     }
  117. }
  118.  
  119. function torbutton_init() {
  120.     if (!m_tb_logger) {
  121.         try {
  122.             var logMngr = Components.classes["@mozmonkey.com/debuglogger/manager;1"]
  123.                                     .getService(Components.interfaces.nsIDebugLoggerManager); 
  124.             m_tb_logger = logMngr.registerLogger("torbutton");
  125.         } catch (exErr) {
  126.             m_tb_logger = false;
  127.         }
  128.     }
  129.  
  130.     torbutton_log(1, 'called init()');
  131.     
  132.     // load localization strings
  133.     if (!m_stringbundle) {
  134.         try {
  135.             var oBundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
  136.                                     .getService(Components.interfaces.nsIStringBundleService);
  137.             m_stringbundle = oBundle.createBundle("chrome://torbutton/locale/torbutton.properties");
  138.         } catch(err) {
  139.             m_stringbundle = false;
  140.         }
  141.         if (!m_stringbundle) {
  142.             torbutton_log(1, 'ERROR (init): failed to find torbutton-bundle');
  143.         }
  144.     }
  145.  
  146.     if (!m_prefs) {
  147.         torbutton_init_pref_objs();
  148.     }
  149.  
  150.     // check if this version of Firefox has the socks_remote_dns option
  151.     m_socks_pref_exists = true;
  152.     try {
  153.         m_prefs.getBoolPref('network.proxy.socks_remote_dns');
  154.         torbutton_log(3, "socks_remote_dns is available");
  155.     } catch (rErr) {
  156.         // no such preference
  157.         m_socks_pref_exists = false;
  158.         torbutton_log(3, "socks_remote_dns is unavailable");
  159.     }
  160.  
  161.     // initialize preferences before we start our prefs observer
  162.     torbutton_init_prefs();
  163.  
  164.     if (!m_toolbutton) {
  165.         torbutton_init_toolbutton();
  166.     } else {
  167.         torbutton_log(5, 'skipping toolbar button element search');
  168.     }
  169.  
  170.     if (!m_statuspanel) {
  171.         torbutton_init_statuspanel();
  172.         torbutton_set_panel_style();
  173.     } else {
  174.         torbutton_log(5, 'skipping statusbar panel element search');
  175.     }
  176.  
  177.     if (!m_wasinited) {
  178.         torbutton_pref_observer.register();
  179.         m_wasinited = true;
  180.     } else {
  181.         torbutton_log(5, 'skipping pref observer init');
  182.     }
  183.     
  184.     torbutton_set_panel_view();
  185.     torbutton_log(2, 'setting torbutton status from proxy prefs');
  186.     torbutton_set_status();
  187.     torbutton_log(2, 'init completed');
  188. }
  189.  
  190. function torbutton_init_pref_objs() {
  191.     torbutton_log(4, "called init_pref_objs()");
  192.     m_prefs = Components.classes["@mozilla.org/preferences-service;1"]
  193.                         .getService(Components.interfaces.nsIPrefBranch);
  194. }
  195.  
  196. // this function duplicates a lot of code in preferences.js for deciding our
  197. // recommended settings.  figure out a way to eliminate the redundancy.
  198. function torbutton_init_prefs() {
  199.     var proxy_port;
  200.     var proxy_host;
  201.     torbutton_log(4, "called init_prefs()");
  202.     if (!m_prefs) { torbutton_log(1, "ERROR: m_prefs undefined"); }
  203.     if (m_prefs.getBoolPref('extensions.torbutton.use_privoxy'))
  204.     {
  205.         proxy_host = 'localhost';
  206.         proxy_port = 8118;
  207.     }
  208.     else
  209.     {
  210.         proxy_host = '';
  211.         proxy_port = 0;
  212.     }
  213.  
  214.     if (m_prefs.getCharPref('extensions.torbutton.settings_method') == 'recommended')
  215.     {
  216.         torbutton_log(5, "using recommended settings");
  217.         if (m_socks_pref_exists)
  218.         {
  219.             m_http_proxy = m_https_proxy = proxy_host;
  220.             m_ftp_proxy = m_gopher_proxy = '';
  221.             m_http_port = m_https_port   = proxy_port;
  222.             m_ftp_port = m_gopher_port   = 0;
  223.         } else {
  224.             m_http_proxy = m_https_proxy = m_ftp_proxy = m_gopher_proxy = proxy_host;
  225.             m_http_port = m_https_port = m_ftp_port = m_gopher_port = proxy_port;
  226.         }
  227.         m_socks_host = 'localhost';
  228.         m_socks_port = 9050;
  229.     } else {
  230.         m_http_proxy   = m_prefs.getCharPref('extensions.torbutton.http_proxy');
  231.         m_http_port    = m_prefs.getIntPref('extensions.torbutton.http_port');
  232.         m_https_proxy  = m_prefs.getCharPref('extensions.torbutton.https_proxy');
  233.         m_https_port   = m_prefs.getIntPref('extensions.torbutton.https_port');
  234.         m_ftp_proxy    = m_prefs.getCharPref('extensions.torbutton.ftp_proxy');
  235.         m_ftp_port     = m_prefs.getIntPref('extensions.torbutton.ftp_port');
  236.         m_gopher_proxy = m_prefs.getCharPref('extensions.torbutton.gopher_proxy');
  237.         m_gopher_port  = m_prefs.getIntPref('extensions.torbutton.gopher_port');
  238.         m_socks_host   = m_prefs.getCharPref('extensions.torbutton.socks_host');
  239.         m_socks_port   = m_prefs.getIntPref('extensions.torbutton.socks_port');
  240.     }
  241.     torbutton_log(1, 'http_port='+m_http_port);
  242.     // m_prefs.setCharPref('extensions.torbutton.http_proxy',   m_http_proxy);
  243.     // m_prefs.setIntPref('extensions.torbutton.http_port',     m_http_port);
  244.     // m_prefs.setCharPref('extensions.torbutton.https_proxy',  m_https_proxy);
  245.     // m_prefs.setIntPref('extensions.torbutton.https_port',    m_https_port);
  246.     // m_prefs.setCharPref('extensions.torbutton.ftp_proxy',    m_ftp_proxy);
  247.     // m_prefs.setIntPref('extensions.torbutton.ftp_port',      m_ftp_port);
  248.     // m_prefs.setCharPref('extensions.torbutton.gopher_proxy', m_gopher_proxy);
  249.     // m_prefs.setIntPref('extensions.torbutton.gopher_port',   m_gopher_port);
  250.     // m_prefs.setCharPref('extensions.torbutton.socks_host',   m_socks_host);
  251.     // m_prefs.setIntPref('extensions.torbutton.socks_port',    m_socks_port);
  252. }
  253.  
  254. function torbutton_init_toolbutton() {
  255.     torbutton_log(4, 'init_toolbutton(): looking for button element');
  256.     if (document.getElementById("torbutton-button")) {
  257.         m_toolbutton = document.getElementById("torbutton-button");
  258.     } else if (document.getElementById("torbutton-button-tb")) {
  259.         m_toolbutton = document.getElementById("torbutton-button-tb");
  260.     } else if (document.getElementById("torbutton-button-tb-msg")) {
  261.         m_toolbutton = document.getElementById("torbutton-button-tb-msg");
  262.     } else {
  263.         torbutton_log(1, 'ERROR (init): failed to find torbutton-button');
  264.     }
  265. }
  266.  
  267. function torbutton_init_statuspanel() {
  268.     torbutton_log(4, 'init_statuspanel(): looking for statusbar element');
  269.     if (document.getElementById("torbutton-panel")) {
  270.         m_statuspanel = document.getElementById("torbutton-panel");
  271.     } else {
  272.         torbutton_log(1, 'ERROR (init): failed to find torbutton-panel');
  273.     }
  274. }
  275.  
  276. function torbutton_check_status() {
  277.     // make sure we have the latest proxy exclusion list
  278.     m_exclusion_list = m_prefs.getCharPref("network.proxy.no_proxies_on");
  279.  
  280.     var remote_dns = false;
  281.     if (m_socks_pref_exists) {
  282.          remote_dns = m_prefs.getBoolPref("network.proxy.socks_remote_dns");
  283.     } else {
  284.          remote_dns = true;
  285.     }
  286.  
  287.     return ( (m_prefs.getIntPref("network.proxy.type")           == 1)              &&
  288.              (m_prefs.getCharPref("network.proxy.http")          == m_http_proxy)   &&
  289.              (m_prefs.getIntPref("network.proxy.http_port")      == m_http_port)    &&
  290.              (m_prefs.getCharPref("network.proxy.ssl")           == m_https_proxy)  &&
  291.              (m_prefs.getIntPref("network.proxy.ssl_port")       == m_https_port)   &&
  292.              (m_prefs.getCharPref("network.proxy.ftp")           == m_ftp_proxy)    &&
  293.              (m_prefs.getIntPref("network.proxy.ftp_port")       == m_ftp_port)     &&
  294.              (m_prefs.getCharPref("network.proxy.gopher")        == m_gopher_proxy) &&
  295.              (m_prefs.getIntPref("network.proxy.gopher_port")    == m_gopher_port)  &&
  296.              (m_prefs.getCharPref("network.proxy.socks")         == m_socks_host)   &&
  297.              (m_prefs.getIntPref("network.proxy.socks_port")     == m_socks_port)   &&
  298.              (m_prefs.getIntPref("network.proxy.socks_version")  == 5)              &&
  299.              (m_prefs.getBoolPref("network.proxy.share_proxy_settings") == false)   &&
  300.              (remote_dns == true) );
  301. }
  302.  
  303. function torbutton_disable_tor() {
  304.     torbutton_log(2, 'called disable_tor()');
  305.     m_prefs.setIntPref("network.proxy.type", 0);
  306. }
  307.  
  308. function torbutton_enable_tor() {
  309.     torbutton_log(2, 'called enable_tor()');
  310.  
  311.     m_prefs.setCharPref("network.proxy.http",         m_http_proxy);
  312.     m_prefs.setIntPref("network.proxy.http_port",     m_http_port);
  313.     m_prefs.setCharPref("network.proxy.ssl",          m_https_proxy);
  314.     m_prefs.setIntPref("network.proxy.ssl_port",      m_https_port);
  315.     m_prefs.setCharPref("network.proxy.ftp",          m_ftp_proxy);
  316.     m_prefs.setIntPref("network.proxy.ftp_port",      m_ftp_port);
  317.     m_prefs.setCharPref("network.proxy.gopher",       m_gopher_proxy);
  318.     m_prefs.setIntPref("network.proxy.gopher_port",   m_gopher_port);
  319.     m_prefs.setCharPref("network.proxy.socks",        m_socks_host);
  320.     m_prefs.setIntPref("network.proxy.socks_port",    m_socks_port);
  321.     m_prefs.setIntPref("network.proxy.socks_version", 5);
  322.     m_prefs.setBoolPref("network.proxy.share_proxy_settings", false);
  323.     if (m_socks_pref_exists) {
  324.         m_prefs.setBoolPref("network.proxy.socks_remote_dns", true);
  325.     }
  326.     m_prefs.setIntPref("network.proxy.type", 1);
  327. }
  328.  
  329. function torbutton_update_status(nMode) {
  330.     var sPrefix;
  331.     var label;
  332.     var tooltip;
  333.  
  334.     torbutton_log(2, 'called update_status('+nMode+')');
  335.     if (nMode == 0) {
  336.         if (m_toolbutton) {
  337.             tooltip = m_stringbundle.GetStringFromName("torbutton.button.tooltip.disabled");
  338.             m_toolbutton.setAttribute('tbstatus', 'off');
  339.             m_toolbutton.setAttribute('tooltiptext', tooltip);
  340.         }
  341.  
  342.         if (window.statusbar.visible) {
  343.             label   = m_stringbundle.GetStringFromName("torbutton.panel.label.disabled");
  344.             tooltip = m_stringbundle.GetStringFromName("torbutton.panel.tooltip.disabled");
  345.             m_statuspanel.style.color = "#F00";
  346.             m_statuspanel.setAttribute('label', label);
  347.             m_statuspanel.setAttribute('tooltiptext', tooltip);
  348.             m_statuspanel.setAttribute('tbstatus', 'off');
  349.         }
  350.     } else {
  351.         if (m_toolbutton) {
  352.             tooltip = m_stringbundle.GetStringFromName("torbutton.button.tooltip.enabled");
  353.             m_toolbutton.setAttribute('tbstatus', 'on');
  354.             m_toolbutton.setAttribute('tooltiptext', tooltip);
  355.         }
  356.  
  357.         if (window.statusbar.visible) {
  358.             label   = m_stringbundle.GetStringFromName("torbutton.panel.label.enabled");
  359.             tooltip = m_stringbundle.GetStringFromName("torbutton.panel.tooltip.enabled");
  360.             m_statuspanel.style.color = "#390";
  361.             m_statuspanel.setAttribute('label', label);
  362.             m_statuspanel.setAttribute('tooltiptext', tooltip);
  363.             m_statuspanel.setAttribute('tbstatus', 'on');
  364.         }
  365.     }
  366. }
  367.  
  368. function torbutton_open_prefs_dialog() {
  369.     window.openDialog("chrome://torbutton/content/preferences.xul","torbutton-preferences","centerscreen, chrome");
  370. }
  371.  
  372. function torbutton_open_about_dialog() {
  373.     var extensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
  374.                            .getService(Components.interfaces.nsIExtensionManager);
  375.     var database = '@mozilla.org/rdf/datasource;1?name=composite-datasource';
  376.     database = Components.classes[database]
  377.                .getService(Components.interfaces.nsIRDFCompositeDataSource);
  378.     database.AddDataSource(extensionManager.datasource);
  379.  
  380.     window.openDialog("chrome://mozapps/content/extensions/about.xul","","chrome,modal","urn:mozilla:item:{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}",database);
  381.  
  382. // or we could just extract the version the way that about.js and about.xul do it
  383. // (the below is incomplete)
  384. /*
  385.   var rdfs = Components.classes["@mozilla.org/rdf/rdf-service;1"]
  386.                        .getService(Components.interfaces.nsIRDFService);
  387.   var extension = rdfs.GetResource("urn:mozilla:item:{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}"); 
  388.   alert(extension.Value);
  389. */
  390. }
  391.  
  392. function torbutton_log(nLevel, sMsg) {
  393.     if (m_tb_logger) {
  394.         var rDate = new Date();
  395.         m_tb_logger.log(nLevel, rDate.getTime()+': '+sMsg);
  396.     } else if (m_debug) {
  397.         var rDate = new Date();
  398.         dump("ERROR: m_tb_logger undefined ");
  399.         dump(rDate.getTime()+': '+sMsg+"\n");
  400.     }
  401. }
  402.